package com.wjm.api.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * Data:2022年07月24日
 * Author:wjm
 * Content: TCP通信程序-Socket相关API
 *
 *
 *  关于远端
 *
 *  关于本地
 *
 *  查看计算机正在使用的端口号命令：netstat -nao
 *  可以通过ping网址来查看该网址的IP
 *
 */
public class SocketDemo {
    public static void main(String[] args) {
        Socket socket = null;
        //创建链接对象Socket
        try {
              //www.baidu.com[182.61.200.7]
              //如果IP地址与端口号不匹配则会报错连接超时或者不能连接java.net.ConnectException
              socket = new Socket("www.baidu.com",443);
              //获取远端的计算机连接对象
              InetAddress inetAddress = socket.getInetAddress();
              //通过远端连接对象获取远端完全限定名
              String name = inetAddress.getCanonicalHostName();
              //获取远端主机地址信息
              String host = inetAddress.getHostName();
              //获取远端端口
              int port = socket.getPort();
              System.out.println("远端连接对象"+inetAddress);
              System.out.println("远端完全限定名"+name);
              System.out.println("远端主机地址信息"+host);
              System.out.println("远端端口"+port);
            System.out.println("------------------------");

            //获取本地的连接对象
            InetAddress inetAddress1 = socket.getLocalAddress();
            //通过本地连接对象获取本地完全限定名
            String name1 = inetAddress1.getCanonicalHostName();
            //获取本地主机地址信息
            String host1 = inetAddress1.getHostName();
            //获取本地端口
            int port1 = socket.getLocalPort();
            System.out.println("本地连接对象"+inetAddress1);
            System.out.println("本地完全限定名"+name1);
            System.out.println("本地主机地址信息"+host1);
            System.out.println("本地端口"+port1);


            //获取输出流
            OutputStream out = socket.getOutputStream();


            //获取输入流
            InputStream in = socket.getInputStream();



        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流链接，释放资源
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
